如果MySQL在创建表时, 出现the right syntax to use near USING BTREE这样的错误,莫惊慌,因为这是MySQL的版本引起的。

使用下面的SQL语句创建表:

CREATE TABLE `message_info_tbl` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `phone` varchar(12) DEFAULT NULL COMMENT '手机号',
  `code` varchar(20) NOT NULL COMMENT '验证码',
  `ip` varchar(15) NOT NULL,
  `create_at` int(10) NOT NULL COMMENT '发送时间',
  `used_state` enum('yes','no') NOT NULL DEFAULT 'no' COMMENT '是否使用',
  `type` enum('find','register') NOT NULL DEFAULT 'register' COMMENT '作用类型',
  `client_type` enum('app','pc','wap') NOT NULL DEFAULT 'pc' COMMENT '客户端类型',
  PRIMARY KEY (`id`),
  KEY `phone` (`phone`) USING BTREE,
  KEY `code` (`code`) USING BTREE,
  KEY `used_state` (`used_state`) USING BTREE,
  KEY `ip` (`ip`) USING BTREE,
  KEY `tl` (`tl`) USING BTREE
) ENGINE=InnoDB  DEFAULT CHARSET=gbk COMMENT='信息详情';

错误:

PRIMARY KEY (`id`),
  KEY `phone` (`phone`) USING BTREE,
  KEY `code` (`code`) USING BTREE,
  KEY `used_state` (`used_state`) USING BTREE,
  KEY `ip` (`ip`) USING BTREE,
  KEY `tl` (`tl`) USING BTREE
) ENGINE=InnoDB  DEFAULT CHARSET=gbk COMMENT='验证信息';
[Err] 1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'USING BTREE,
  KEY `code` (`code`) USING BTREE,
  KEY `used_s

因为mysql新版本的USING BTREE语法与老版本有些不同(mysql5.14前后)

我们只需要将文件中的形如:

    KEY `code` (`code`) USING BTREE

改为

    KEY `code` USING BTREE(`code`)

意外:

如果改了之后还不起作用,则需要查看你的MySQL版本了,通过命令select version(); 查看,我的MySQL版本为 4.0.27经典版的, 所以,使用以上的方法还不能解决问题,所以,就要用最原始的方法,去掉USING BTREE关键字,并且SQL语句里边不能有字段注释comments,所以,低版本MySQL的语句为下面这样的:

mysql> select version(); 
+-----------+ 
| version() | 
+-----------+ 
| 4.0.27 | 
+-----------+ 
1 row in set (0.12 sec) 

Mysql 低版本语句:

CREATE TABLE `message_info_tbl` (
`id`  int(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
`phone`  varchar(12) NULL DEFAULT NULL ,
`code`  varchar(20) NOT NULL DEFAULT '' ,
`ip`  varchar(36) NOT NULL DEFAULT '' ,
`used_state`  enum('yes','no') NOT NULL DEFAULT 'no' ,
`type`  enum('find','register') NOT NULL DEFAULT 'register' ,
`client_type`  enum('pc','app','wap') NOT NULL DEFAULT 'pc' ,
`create_at`  int(10) UNSIGNED NOT NULL DEFAULT 0 ,
PRIMARY KEY (`id`),
INDEX `phone` (`phone`),
INDEX `code` (`code`),
INDEX `used_state` (`used_state`),
INDEX `ip` (`ip`)
)
TYPE=InnoDB
ROW_FORMAT=DYNAMIC
;

OK ,这样就可以解决 USING BTREE错误了~


Corwien
6.3k 声望1.6k 粉丝

为者常成,行者常至。